const jwt = require('jsonwebtoken');
const jwtconfig = require('./index');

// 生成 token 的方法
const generateToken = (userId) => {
    const secretKey = jwtconfig.JwtSecretkey; // 从配置中获取密钥
    const expiresIn = '1h'; // 1小时过期
    return jwt.sign({ userId }, secretKey, { expiresIn });
};

// 验证 token 的中间件
const authenticateToken = (req, res, next) => {
    console.log(req.path)
    let token = req.headers['authorization'];
    if (req.path === '/api/login' || req.path.startsWith('/public/') || req.path == '/wx_chat/wx_Aibot') {
        next();
    } else {
        if (!token) {
            return res.status(401).json({ message: '未提供身份验证令牌', status: -1 });
        }
        // 检查 token 是否以 "Bearer" 开头，如果不是，则添加前缀
        // if (!token.startsWith('Bearer ')) {
        //     token = 'Bearer' + token;
        // }
        // 验证 token 的真实性
        jwt.verify(token, jwtconfig.JwtSecretkey, { ignoreExpiration: false }, (err, decoded) => {
            if (err) {
                if (err.name === 'TokenExpiredError') {
                    return res.status(403).json({ message: 'token已过期', status: -1 });
                } else {
                    return res.status(403).json({ message: '无效的token', status: -1 });
                }
            } else {
                req.userId = decoded.userId; // 将解码后的用户 ID 存储在请求对象中
                next();
            }

        });
    }

};




module.exports = {
    generateToken,
    authenticateToken
};
